package com.atguigu.spring.dynamicproxy;

import org.junit.jupiter.api.Test;

/**
 * @author yanglin
 * @create 2023-12-12 14:11 星期二
 * description:
 */
public class TestDynamic {

    /**
     * 测试JDK动态代理
     */
    @Test
    public void testJDKDynamicProxy(){
        //创建目标对象
        UserDao userDao = new UserDaoImpl();
        //给目标对象创建代理对象
        UserDao proxyInstance = (UserDao)new ProxyFactoryJDK(userDao).getProxyInstance();
        //通过代理对象调用目标对象的方法
        System.out.println(proxyInstance.add(1,2));

    }

    /**
     * 测试Cglib动态代理
     */
    @Test
    public void testCglibDynamic(){ 
        //创建目标对象
        TeacherDao teacherDao = new TeacherDao();
        //获取代理对象 并且将目标对象传递给代理对象
        TeacherDao proxyInstance = (TeacherDao)new ProxyFactoryCglib(teacherDao).getProxyInstance();
        //利用代理对象，调用目标对象的方法  (底层触发intercept方法，从而实现对目标对象的调用)
        proxyInstance.teach();
    }
    
}
